草庐IT

数的计数 c++

全部标签

c++ - 用于位计数的元程序

我需要C++中的位计数器实用程序,它能够计算数字常量值中最高有效位的数量,并将该数字显示为编译时常量。只是为了让一切都清楚-一组数值的最高有效位的数量:255=>8(11111111b)7=>3(111b)1024=>11(10000000000b)26=>5(11010b)我是模板编程的新手,但我认为就是这样。请提供一些代码示例,我们将不胜感激。 最佳答案 编辑:我完全误读了你想要的内容。这是你想要的:0的有效位数为0。x中的有效位数是x/2中的有效位数加1。所以你得到:templatestructSignificantBits{

c++ - 设置十六进制数的位数

如何在十六进制数中设置一个数字?我目前有这段代码:introw=0x00000000;row|=0x3只要“行”只是零,它就可以很好地工作。只要我把它改成这样:introw=0x33333333;row|=0x3我刚得到这个输出:Row:0x33333333 最佳答案 您应该先删除(使其为0)数字。row&=~(0xf~运算符反转数字中所有位的值。所以。0x000000f0变为0xffffff0f。您的代码应如下所示:row&=~(0xf 关于c++-设置十六进制数的位数,我们在Stac

c++ - 为什么 C++ 智能指针实现将引用计数器与指针一起保存在堆上?

阅读Alexandrescu和wikipipidia我看到指针和引用计数器存储在堆上。然后提到引用计数效率低下,因为必须在堆上分配计数器?为什么不存储在堆栈中? 最佳答案 因为一旦智能指针的当前实例超出范围,您就会丢失它。智能指针用于模拟动态分配的自动存储对象。智能指针本身是自动管理的。因此,当一个人被摧毁时,它存储在自动存储中的任何东西也会被摧毁。但是您不想丢失引用计数器。所以你将它存储在动态存储中。 关于c++-为什么C++智能指针实现将引用计数器与指针一起保存在堆上?,我们在Sta

c++ - 处理线性代数的最佳基类型

我正在为一个项目用C++编写一个小而不充分的线性代数库(对不起)。我正在使用double实现矩阵和运算。我做得对吗?我应该改为实现模板类吗?是否有更精确的类型? 最佳答案 我会使用模板实现类/结构。一开始,您很可能会对double感到满意,但我发现在我没有将矩阵作为模板实现的每个项目中,我后来都后悔了.此外,它还让您有机会使用更有趣的元素代数-区间算术、概率分布、复杂数学、定点匹配、子矩阵、简单数学:-)等。 关于c++-处理线性代数的最佳基类型,我们在StackOverflow上找到一

c++ - 为什么不直接使用静态变量作为智能指针的引用计数

当我查看“增强”版本的智能指针时——增强是添加了引用计数——我看到他们使用了一些“复杂”的引用计数技术,例如一个完全独立的类或一个指向整数的指针。举个例子:templateclassSmartPointer{T*mp_T;unsignedint*mp_Count;public:...alltheAPIs...};我想知道,yield是多少?由于目标是让所有实例共享该值,为什么不将其声明为静态成员变量:templateclassSmartPointer{T*mp_T;staticunsignedintm_Count;public:...alltheAPIs...};我一定错过了什么,但经

在最外面的NG重复中获取嵌套NG重复的计数,并根据NG模型值动态更新

我有三个嵌套的ng重复,以显示驱动器相应的文件夹及其相应的文件。示例数据如下所示Drives=[{name:'CDrive',folders:[{name:'personal',files:[{name:'a.txt'},{name:'b.txt'}]}]}]因此,我有三个嵌套的ng重复,以显示驱动器名称,其文件夹和文件夹中的文件。如何在驱动器中获取文件总数并沿驱动器名称显示。示例代码{{drive.name}}{{folder.name}}{{filteredfiles.length}}{{file.name}}请注意,我有一个搜索过滤器,因此驱动器中的文件数应根据所应用的过滤器值动态更新,

c++ - C/C++ 宏,用于在不使用三元运算符的情况下查找两个数的最大值

我遇到了一个面试问题,内容如下:“在不使用标准库或三元运算符的情况下编写一个简单的C/C++宏来查找两个数中的最大值”。我需要你的帮助来解决这个问题。我知道这很简单,但我找不到。所以,把它张贴在这里。#include#definemax(x,y)/*LOGICHERE*/usingnamespacestd;voidmain(){inta=98453;intb=66394;cout 最佳答案 使用bool运算得到0或1,然后将它们相加:#definemax(x,y)(((int)((x)

c++ - 以十进制数的二进制格式计算 1 的个数

我想找出一个大十进制数(十进制数可以大到1000000)的二进制形式的1的个数。我试过这段代码:while(sum>0){if(sum%2!=0){c++;//countingnumberofones}sum=sum/2;}我想要一个更快的算法,因为它需要很长时间才能输入大量小数。请建议我一个有效的算法。 最佳答案 您正在寻找的是“popcount”,它在后来的x64CPU上作为单个CPU指令实现,速度不会被打败:#ifdef__APPLE__#defineNAME(name)_##name#else#defineNAME(name

c++ - C++11 中的数据竞争、UB 和计数器

以下模式在许多软件中很常见,这些软件想要告诉用户它做了多少次各种事情:intnum_times_done_it;//globalvoiddoit(){++num_times_done_it;//dosomething}voidreport_stats(){printf("calleddoit%itimes\n",num_times_done_it);//andprobablysomeotherstufftoo}不幸的是,如果多个线程可以在没有某种同步的情况下调用doit,则对num_times_done_it的并发读取-修改-写入可能是数据竞争,因此整个程序的行为将是不确定的。此外,如

c++ - 生成第 n 个 Motzkin 数的最快方法是什么?

我想生成所有MotzkinNumber并存储在一个数组中。公式如下:我目前的实现速度太慢了:voidgenerate_slow(){mm[0]=1;mm[1]=1;mm[2]=2;mm[3]=4;mm[4]=9;ullresult;for(inti=5;i此外,我一直在寻找递归矩阵的封闭形式,以便我可以应用指数平方。谁能建议一个更好的算法?谢谢。编辑我无法应用第二个公式,因为除法在对数字取模时不适用。n的最大值为10,000,超出了64位整数的范围,因此答案是对更大的数m取模,其中m=10^14+7。不允许使用更大的整数库。 最佳答案